package club.xyes.zkh.ecommerce.service.adapter;

import club.xyes.zkh.ecommerce.commons.entity.Shop;
import club.xyes.zkh.ecommerce.commons.entity.ShopMembershipLevel;
import club.xyes.zkh.ecommerce.commons.entity.User;
import club.xyes.zkh.ecommerce.commons.entity.UserMembership;
import club.xyes.zkh.ecommerce.service.listener.OnUserMembershipLevelChangedListener;

import java.util.List;

/**
 * Create by 郭文梁 2019/4/22 0022 09:48
 * UserMembershipSingleDependencyAdapter
 * 用户会员单依赖服务适配器
 *
 * @author 郭文梁
 * @data 2019/4/22 0022
 */
public interface UserMembershipSingleDependencyAdapter extends SingleDependencyMapperAdapter<UserMembership> {


    /**
     * 通过ID查找用户会员 同事关联查询所有属性
     *
     * @param id ID
     * @return 会员信息
     */
    UserMembership getFetchAll(Integer id);

    /**
     * 通过ID查找用户会员, 同事关联查询所有属性
     * 当查询结果为Null时抛出异常
     *
     * @param id ID
     * @return 会员信息
     */
    UserMembership getRequiredFetchAll(Integer id);

    /**
     * 根据用户和等级查询会员都西昂
     *
     * @param user  用户
     * @param level 等级
     * @return 用户会员对象
     */
    UserMembership findByUserAndLevel(User user, ShopMembershipLevel level);

    /**
     * 根据用户查询会员信息
     *
     * @param user 用户
     * @return 会员信息
     */
    List<UserMembership> findByUser(User user);

    /**
     * 用户会员等级注册
     *
     * @param user     用户
     * @param level    会员等级
     * @param shop     商铺
     * @param listener 会员等级状态发生变化的监听器
     * @return 用户会员对象
     */
    UserMembership register(User user, Shop shop, ShopMembershipLevel level, OnUserMembershipLevelChangedListener listener);

    /**
     * 通过用户和商铺查询用户会员
     *
     * @param user             用户
     * @param shop             商铺
     * @param shopMembershipId 商铺会员ID
     * @return 会员信息
     */
    UserMembership findByUserAndShop(User user, Shop shop, Integer shopMembershipId);
}
